#define SCREEN_WIDTH(widget) text_window_get_width (GTK_TEXT_VIEW (widget)->text_window)
#define SCREEN_HEIGHT(widget) text_window_get_height (GTK_TEXT_VIEW (widget)->text_window)
-/* #define DEBUG_VALIDATION_AND_SCROLLING */
+#if 0
+#define DEBUG_VALIDATION_AND_SCROLLING
+#endif
#ifdef DEBUG_VALIDATION_AND_SCROLLING
#define DV(x) (x)
}
gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
- DV(g_print(">Changed adj upper to %d ("G_STRLOC")\n", upper));
+ DV(g_print(">Changed adj upper to %g ("G_STRLOC")\n", upper));
if (value_changed)
{
DV(g_print(">Invalidate, onscreen_validated = FALSE ("G_STRLOC")\n"));
if (!text_view->first_validate_idle)
- text_view->first_validate_idle = g_idle_add_full (GTK_PRIORITY_RESIZE - 1, first_validate_callback, text_view, NULL);
-
+ {
+ text_view->first_validate_idle = g_idle_add_full (GTK_PRIORITY_RESIZE - 2, first_validate_callback, text_view, NULL);
+ DV (g_print (G_STRLOC": adding first validate idle %d\n",
+ text_view->first_validate_idle));
+ }
+
if (!text_view->incremental_validate_idle)
- text_view->incremental_validate_idle = g_idle_add_full (GTK_TEXT_VIEW_PRIORITY_VALIDATE, incremental_validate_callback, text_view, NULL);
+ {
+ text_view->incremental_validate_idle = g_idle_add_full (GTK_TEXT_VIEW_PRIORITY_VALIDATE, incremental_validate_callback, text_view, NULL);
+ DV (g_print (G_STRLOC": adding incremental validate idle %d\n",
+ text_view->incremental_validate_idle));
+ }
}
static void
{
gtk_text_buffer_insert_interactive_at_cursor (get_buffer (text_view), "\n", 1,
text_view->editable);
+ DV(g_print (G_STRLOC": scrolling to mark\n"));
gtk_text_view_scroll_to_mark (text_view,
gtk_text_buffer_get_mark (get_buffer (text_view),
"insert"),
{
gtk_text_buffer_insert_interactive_at_cursor (get_buffer (text_view), "\t", 1,
text_view->editable);
+ DV(g_print (G_STRLOC": scrolling onscreen\n"));
gtk_text_view_scroll_mark_onscreen (text_view,
gtk_text_buffer_get_mark (get_buffer (text_view),
"insert"));
GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);
gtk_widget_queue_draw (widget);
+ DV(g_print (G_STRLOC": focus_in_event\n"));
+
if (text_view->cursor_visible && text_view->layout)
{
gtk_text_layout_set_cursor_visible (text_view->layout, TRUE);
GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
gtk_widget_queue_draw (widget);
+ DV(g_print (G_STRLOC": focus_out_event\n"));
+
if (text_view->cursor_visible && text_view->layout)
{
gtk_text_layout_set_cursor_visible (text_view->layout, FALSE);
g_return_if_fail (text_view->xoffset >= 0);
g_return_if_fail (text_view->yoffset >= 0);
+ DV (g_print (G_STRLOC": first_validate_idle: %d\n",
+ text_view->first_validate_idle));
+
if (!text_view->onscreen_validated)
{
G_BREAKPOINT ();
else
gtk_text_buffer_place_cursor (get_buffer (text_view), &newplace);
+ DV(g_print (G_STRLOC": scrolling onscreen\n"));
gtk_text_view_scroll_mark_onscreen (text_view,
gtk_text_buffer_get_mark (get_buffer (text_view),
"insert"));
/* Adjust to have the cursor _entirely_ onscreen, move_mark_onscreen
* only guarantees 1 pixel onscreen.
*/
+ DV(g_print (G_STRLOC": scrolling onscreen\n"));
gtk_text_view_scroll_mark_onscreen (text_view,
gtk_text_buffer_get_mark (get_buffer (text_view),
"insert"));
}
gtk_text_buffer_end_user_action (get_buffer (text_view));
-
+
+ DV(g_print (G_STRLOC": scrolling onscreen\n"));
gtk_text_view_scroll_mark_onscreen (text_view,
gtk_text_buffer_get_mark (get_buffer (text_view), "insert"));
}
gtk_text_view_cut_clipboard (GtkTextView *text_view)
{
gtk_text_buffer_cut_clipboard (get_buffer (text_view), text_view->editable);
+ DV(g_print (G_STRLOC": scrolling onscreen\n"));
gtk_text_view_scroll_mark_onscreen (text_view,
gtk_text_buffer_get_mark (get_buffer (text_view),
"insert"));
gtk_text_view_copy_clipboard (GtkTextView *text_view)
{
gtk_text_buffer_copy_clipboard (get_buffer (text_view));
+ DV(g_print (G_STRLOC": scrolling onscreen\n"));
gtk_text_view_scroll_mark_onscreen (text_view,
gtk_text_buffer_get_mark (get_buffer (text_view),
"insert"));
gtk_text_view_paste_clipboard (GtkTextView *text_view)
{
gtk_text_buffer_paste_clipboard (get_buffer (text_view), text_view->editable);
+ DV(g_print (G_STRLOC": scrolling onscreen\n"));
gtk_text_view_scroll_mark_onscreen (text_view,
gtk_text_buffer_get_mark (get_buffer (text_view),
"insert"));
GdkModifierType state;
GtkTextIter newplace;
+ /* DV(g_print (G_STRLOC": begin\n")); */
+
gdk_window_get_pointer (text_view->text_window->bin_window,
&x, &y, &state);
-
+
+ /* DV(g_print (G_STRLOC": get iter at pixel\n"); */
gtk_text_layout_get_iter_at_pixel (text_view->layout,
&newplace,
x + text_view->xoffset,
GtkTextMark *mark =
gtk_text_buffer_get_mark (get_buffer (text_view), mark_name);
+ DV(g_print (G_STRLOC": move mark\n"));
gtk_text_buffer_move_mark (get_buffer (text_view),
mark,
&newplace);
+ DV(g_print (G_STRLOC": scrolling onscreen\n"));
gtk_text_view_scroll_mark_onscreen (text_view, mark);
}
}
text_view = GTK_TEXT_VIEW (data);
+ DV(g_print (G_STRLOC": calling move_mark_to_pointer_and_scroll\n"));
move_mark_to_pointer_and_scroll (text_view, "insert");
GDK_THREADS_LEAVE ();
gtk_text_buffer_move_mark (get_buffer (text_view),
text_view->dnd_mark,
&newplace);
-
+
+ DV(g_print (G_STRLOC": scrolling onscreen\n"));
gtk_text_view_scroll_to_mark (text_view,
text_view->dnd_mark,
DND_SCROLL_MARGIN, FALSE, 0.0, 0.0);
static gint
selection_motion_event_handler (GtkTextView *text_view, GdkEventMotion *event, gpointer data)
{
+ DV(g_print (G_STRLOC": calling move_mark_to_pointer_and_scroll\n"));
move_mark_to_pointer_and_scroll (text_view, "insert");
/* If we had to scroll offscreen, insert a timeout to do so
}
/* one last update to current position */
+ DV(g_print (G_STRLOC": calling move_mark_to_pointer_and_scroll\n"));
move_mark_to_pointer_and_scroll (text_view, "insert");
gtk_grab_remove (GTK_WIDGET (text_view));
text_view->dnd_mark,
&newplace);
+ DV(g_print (G_STRLOC": scrolling to mark\n"));
gtk_text_view_scroll_to_mark (text_view,
text_view->dnd_mark,
DND_SCROLL_MARGIN, FALSE, 0.0, 0.0);
}
gtk_text_buffer_end_user_action (get_buffer (text_view));
-
+
+ DV(g_print (G_STRLOC": scrolling onscreen\n"));
gtk_text_view_scroll_mark_onscreen (text_view,
gtk_text_buffer_get_mark (get_buffer (text_view),
"insert"));